def demo21():
    '''
    若a=[1,2,3],令b=a，执行b[0]=9，a[0]是否改变？为何？如何避免？
    :return:
    '''
    a=[1,2,3]
    b=a
    b[0]=9
    print(a[0])
    """
    为了避免 a 和 b 共享同一个列表，你可以通过 复制列表 来创建一个独立的新列表。这可以使用以下几种方式：
    """
    a = [1, 2, 3]
    b = a.copy()  # 创建一个新的列表 b，它是 a 的副本

    b[0] = 9

    print(a)  # 输出: [1, 2, 3]
    print(b)  # 输出: [9, 2, 3]


def demo22():
    '''
    将['x','y','z']和[1,2,3]转换成[('x',1),('y',2),('z',3)]形式
    :return:
    '''
    a = ['x', 'y', 'z']
    b = [1, 2, 3]
    c = list(zip(a, b))
    print(c)


def demo23():
    '''
    以列表形式返回字典{'Alice':20,'Beth':18,'Cecil':21}中所有键
    :return:
    '''
    my_dic = {'Alice':20,'Beth':18,'Cecil':21}
    my_list = [keys for keys in my_dic.keys()]
    print(my_list)


def demo24():
    '''
    以列表形式返回字典{'Alice':20,'Beth':18,'Cecil':21}中所有值
    :return:
    '''
    my_dic = {'Alice':20,'Beth':18,'Cecil':21}
    my_list = [values for values in my_dic.values()]
    print(my_list)


def demo25():
    '''
    以列表形式返回字典{'Alice':20,'Beth':18,'Cecil':21}中所有键值对组成的元组
    :return:
    '''
    my_dic = {'Alice':20,'Beth':18,'Cecil':21}
    my_list = [items for items in my_dic.items()]
    print(my_list)


def demo26():
    '''
    向字典{'Alice':20,'Beth':18,'Cecil':21}追加 'David':19 键值对,更新Cecil的值为17
    :return:
    '''
    my_dic = {'Alice':20,'Beth':18,'Cecil':21}
    my_dic['David'] = 19
    my_dic['Cecil'] = 17
    print(my_dic)


def demo27():
    '''
    删除字典{'Alice':20,'Beth':18,'Cecil':21}中的Beth键后，清空该字典
    :return:
    '''
    my_dic = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
    my_dic.pop('Beth')
    print(my_dic)
    my_dic.clear()
    print(my_dic)


def demo28():
    '''
    判断David和Alice是否在{'Alice': 20, 'Beth': 18, 'Cecil': 21}中
    :return:
    '''
    my_dic = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
    if 'Alice' in my_dic:
        print('Alice is in dic')
    else:
        print('Alice is not in dic')
    if 'David' in my_dic:
        print('David is in dic')
    else:
        print('David is not in dic')


def demo29():
    '''
    遍历字典{'Alice': 20, 'Beth': 18, 'Cecil': 21}，打印键值对
    :return:
    '''
    my_dic = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
    for key,value in my_dic.items():
        print(key,value)


def demo30():
    '''
    若a = dict(),令b=a,执行b.update({'x':1}),a也被改变。为何？如何避免？
    :return:
    '''
    a = dict()
    b = a
    b.update({'x': 1})
    print(a)
    print('b = a 使得 b 和 a 指向同一个字典对象。\nb.update() 修改了字典对象的内容，因为 a 和 b 指向的是同一个字典，所以修改 b 会影响 a。')


    '''
    通过创建字典副本来避免a和b共享同一个字典对象
    :return:
    '''
    a = dict()
    b = a.copy()  # 或者 b = dict(a)
    b.update({'x': 1})
    print(a)  # a 不会被修改
    print(b)  # b 被修改



if __name__ == '__main__':
    # demo21()
    # demo22()
    # demo23()
    # demo24()
    # demo25()
    # demo26()
    # demo27()
    # demo28()
    # demo29()
    demo30()